package groupmanagement;

import database.DBConnectorMySQL;
import database.IDBConnector;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import partnermanagement.IKind;

import superkigav.shared.rightsmanagement.UserTicket;


public class GroupManagement implements IGroupManagement {
	private IDBConnector idbconnector;
        
        public GroupManagement(){
            this.idbconnector = DBConnectorMySQL.getInstance();
        try {
            idbconnector.connect();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(GroupManagement.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(GroupManagement.class.getName()).log(Level.SEVERE, null, ex);
        }
        }
	
	private int getGruppenID(IGruppe gruppe,UserTicket ut){
		int GruppenID = 0;
		String Statement = ("select idGruppe from Gruppe where Name = '" + gruppe.getName() + "';");
		try {
			ResultSet resultSet = idbconnector.query(Statement);
                        while(resultSet.next()){
                           GruppenID = resultSet.getInt("idGruppe"); 
                        }
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return GruppenID;
	}
	
	
//	@Override
//	public List<Integer> getKinderByGroup(IGruppe gruppe, UserTicket ut) {
//		
//		int GruppenID;
//		List<Integer> result = new ArrayList<Integer>();
//		ResultSet resultSet = null;
//		GruppenID = getGruppenID(gruppe);
//		try {
//			
//			String Statement = ("select idKind from Kind where Anmeldung.idKind = Kind.idKind AND Anmeldung.idGruppe = " + GruppenID + ";");
//			resultSet = idbconnector.query(Statement);
//			while (resultSet.next()) {
//				result.add(new Integer(resultSet.getInt("idKind")));
//				
//			}
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		
//		return result;
//		
//		}

//	@Override
//	public Status getStatus(int KindID, IGruppe gruppe, UserTicket ut) {
//		ResultSet resultSet = null;
//		Status status = null;
//		//int GruppenID = getGruppenID(gruppe); nicht mehr benötigt, ID im Gruppenobject
//                System.out.println("getSTatus::Gruppenid: " + gruppe.getId());
//		String statement = "select Status from Anmeldung where idKind =" + KindID + " AND idGruppe =" + gruppe.getId() + ";";
//		System.out.println("getSTatus::Statement: " + statement);
//                try {
//			resultSet = idbconnector.query(statement);
//                        while(resultSet.next()){
//                            String statusSTr = resultSet.getString("Status");
//                            System.out.println("getSTatus::resultString Status: "+statusSTr);
//                             
//                            status = Status.valueOf(statusSTr);
//                        }
//			
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		
//		return status;
//	}

	@Override
	public List<IGruppe> getGruppen(UserTicket ut) {
		List<IGruppe> result = new ArrayList<IGruppe>();
		ResultSet resultSet = null;
		try {
			
			String Statement = ("select * from Gruppe;");
			resultSet = idbconnector.query(Statement);
			while (resultSet.next()) {
                            int GruppenID = resultSet.getInt("idGruppe");
                            String Gruppenname = resultSet.getString("Name");
                            Gruppenart gruppenart = Gruppenart.valueOf(resultSet.getString("GruppenArt"));
                            boolean hasFrueh = resultSet.getBoolean("hasFrueh");
                            boolean hasSpaet = resultSet.getBoolean("hasSpaet");
                            int limit = resultSet.getInt("Limit");
                            IGruppe gruppe = new Gruppe(GruppenID, Gruppenname, gruppenart, hasFrueh, hasSpaet, limit);
                            result.add(gruppe);
				
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return result;
		
		
	}

	@Override
	public List<Integer> getAnmeldungenByGroup(IGruppe gruppe, UserTicket ut) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void addAnmeldung(IAnmeldung anm, UserTicket ut) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void deleteAnmeldung(IAnmeldung anm, UserTicket ut) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void updateAnmeldung(IAnmeldung anm, UserTicket ut) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void addGruppe(IGruppe gruppe, UserTicket ut) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void removeKindFromGruppe(IKind kind, IGruppe gruppe, UserTicket ut) {
		// TODO Auto-generated method stub
		
	}

//	@Override
//	public List<IGruppe> getGruppen(int KindID, UserTicket ut) {
//		List<IGruppe> result = new ArrayList<IGruppe>();
//		ResultSet resultSet = null;
//		try {
//			
//			String Statement = ("select * from Gruppe where Gruppe.idGruppe in (select Anmeldung.idGruppe from Anmeldung where Anmeldung.idKind = " + KindID + " and Gruppe.idGruppe = Anmeldung.idGruppe) ;");
//			resultSet = idbconnector.query(Statement);
//			while (resultSet.next()) {
//                            int GruppenID = resultSet.getInt("idGruppe");
//                            String Gruppenname = resultSet.getString("Name");
//                            Gruppenart gruppenart = Gruppenart.valueOf(resultSet.getString("GruppenArt"));
//                            boolean hasFrueh = resultSet.getBoolean("hasFrueh");
//                            boolean hasSpaet = resultSet.getBoolean("hasSpaet");
//                            int limit = resultSet.getInt("Limit");
//                            IGruppe gruppe = new Gruppe(GruppenID, Gruppenname, gruppenart, hasFrueh, hasSpaet, limit);
//                            result.add(gruppe);
//				
//			}
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		
//		return result;
//	}

//	@Override
//	public void removeKindFromGruppe(int KindID, IGruppe gruppe, UserTicket ut) {
//		ResultSet resultSet = null;
//		try {	
//			String Statement = ("delete from Gruppe where idKind = KindID AND idGruppe=" + gruppe.getId() +";");
//			resultSet = idbconnector.query(Statement);
//							
//			
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//			
//	}

//	@Override
//	public void addKindToGruppe(int KindID, IGruppe gruppe, boolean nutztFruehDienst, boolean nutztSpaetDienst,UserTicket ut) {
//		
//            
//            // Limit erfragen
//            int GruppenLimit = 0;
//            String Statement = ("select Gruppe.Limit from Gruppe where idGruppe = " + gruppe.getId() + ";");
//            System.out.println("addKindToGruppe::Statement: "+ Statement);
//		try {
//			ResultSet resultSet = idbconnector.query(Statement);
//                        while(resultSet.next()){
//                            GruppenLimit = resultSet.getInt("Limit");
//                        }
//			
//			
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//            // Anzahl der Anmeldungen:
//            Statement = ("select * from Anmeldung where idGruppe =" + gruppe.getId() +" AND Status = 'ANGEMELDET';");
//                   
//                
//            	try {	ResultSet resultSet = idbconnector.query(Statement);
//            int nutztFrueh = 0;
//            int nutztSpaet = 0;
//            if(nutztFruehDienst){
//                nutztFrueh =1;
//            }
//            if(nutztSpaetDienst){
//                nutztSpaet =1;
//            }
//            
//            
//            if(resultSet.getFetchSize()<GruppenLimit){
//			Statement = ("INSERT INTO `superkigav`.`Anmeldung` (`Status`, `idKind`, `idGruppe`, `nutztFrueh`, `nutztSpaet`) VALUES ('ANGEMELDET', "+KindID + ","+gruppe.getId()+", "+nutztFrueh+","+nutztSpaet +");");
//			int affectedRows = idbconnector.update(Statement);
//							
//            }
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//                
//            }
			
		
	}

